package to_String;

public class ToString01 {
    public static void main(String[] args) {

        //toString源码
        //(1)getClass().getName() 类的全类名，即包名+类名
        //(2)Integer.toHexString(hashCode()将对象的hashCode值转成i6进制的字符串

        /* public String toString() {//返回类型string
            return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }*/

        Monster monster = new Monster("小妖怪", "巡山", 1000);
        System.out.println(monster.toString() + "hashcode=" + monster.hashCode());//monster没有重写toString方法
        //to_String.Monster@4554617c
        //monster运行类型为Monster，调用方法时从monster开始找，由于子类monster已经重写所以不会调用父类的toString方法
        //重写后：Monster{name='小妖怪', job='巡山', sal=1000.0}

        //当直接输出一个对象时，toString方法会被默认的调用
        System.out.println(monster);  //就会默认调用monster.toString( )
    }
}
class Monster{
    private String name;
    private String job;
    private double sal;

    public Monster(String name, String job, double sal) {
        this.name = name;
        this.job = job;
        this.sal = sal;
    }
    //重写toString方法，输出对象的属性
    //使用快捷键即可 alt+insert -> toString
    @Override
    public String toString() {//重写后一般是把对象的属性值输出，当然程序员也可以自己定制
        return "Monster{" +
                "name='" + name + '\'' +
                ", job='" + job + '\'' +
                ", sal=" + sal +
                '}';
    }
}